package modelo.moviles;


import titiritero.Posicionable;
import modelo.*;
import modelo.estrategias.*;

public abstract class Movil implements Encontrable, Posicionable{
	protected static final int FACTOR_MOVIMIENTO = 13;
	protected Nivel nivel;
	protected EstrategiaDeVuelo estrategia;
	protected Posicion posicion;
	protected boolean estallo;



	
	/* constructor con parametro */
	public Movil (Nivel nuevoNivel){
		this.iniciarFlagEstallo();
		this.setPosicion(new Posicion(1,1));
		this.setNivel( nuevoNivel);
	}
	
	/* al estallar le dice al nivel que lo saque del mismo */
	public void estallar(){
		this.estallo = true;
	}
	
	/* Getters y Setters */
	public Nivel getNivel() {
		return nivel;
	}

	public void setNivel(Nivel nivel) {
		this.nivel = nivel;
		nivel.agregarMovil(this);
	}

	public EstrategiaDeVuelo getEstrategia() {
		return estrategia;
	}

	public void setEstrategia(EstrategiaDeVuelo estrategia) {
		this.estrategia = estrategia;
	}

	public Posicion getPosicion() {
		return posicion;
	}

	public void setPosicion(Posicion posicion) {
		this.posicion = posicion;
	}



	public boolean noEstallo() {
		return (!estallo);
	}
	

	/* "Devuelve la posicion Y" */
	public int getColumna(){
		return this.posicion.getColumna();
	}

	/* "Devuelve la posicion X" */
	public int getFila(){
		return this.posicion.getFila();
	}

	/* "Cargamos el flag en false" */
	protected void iniciarFlagEstallo(){
		estallo = false;
	}

	/* "Le cambia la posicion al movil" */
	public void vivir(){
		this.getEstrategia().adelantarMovil(this);
	}

	/* "Le cambia la columna al movil" */
	public void setColumna(int nuevaColumna){
		posicion.setColumna(nuevaColumna);
	}

	/* "Le cambia la fila al movil" */
	public void setFila(int nuevaFila){
		posicion.setFila(nuevaFila);
	}

	public int getFactorMovimiento(){
		return FACTOR_MOVIMIENTO;
	}
}


